package cn.baddonkey.superqueryjavasdk.bean;

import cn.baddonkey.superqueryjavasdk.entity.request.SqlProcessRequest;
import cn.baddonkey.superqueryjavasdk.entity.vo.ModuleQueryConfigVo;
import cn.baddonkey.superqueryjavasdk.interfaces.ModuleConfigAssembleInterface;
import cn.baddonkey.superqueryjavasdk.interfaces.ModuleConfigQueryInterface;
import cn.baddonkey.superqueryjavasdk.interfaces.ModuleConvertInterface;
import cn.baddonkey.superqueryjavasdk.interfaces.ModuleSqlProcessInterface;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;

import java.util.Map;

@Slf4j
@Setter
@RequiredArgsConstructor
@ConditionalOnMissingBean
public class SqlProcessor {
    private ModuleConfigQueryInterface moduleConfigQuery;
    private ModuleConfigAssembleInterface moduleConfigAssemble;
    private ModuleSqlProcessInterface moduleSqlProcess;
    private ModuleConvertInterface moduleConvert;

    public String process(SqlProcessRequest request) {
        ModuleQueryConfigVo moduleQueryConfig = moduleConfigQuery.query(request.getModuleCode());
        String sql = moduleConfigAssemble.generateSql(moduleQueryConfig, request.getQueryParams());
        // TODO 确认返回结构
        Map<Object, Object> ret = moduleSqlProcess.process(sql);
        return moduleConvert.convert(ret);
    }
}
